BlockingAutomaton

class BlockingAutomaton<State, Transition, NoNextStateReason>(initialState: State, checkTransition: BlockingAutomaton<State, Transition, NoNextStateReason>.(previousState: State, transition: Transition) -> CheckResult<State, NoNextStateReason>, onTransition: BlockingAutomaton<State, Transition, NoNextStateReason>.(previousState: State, transition: Transition, nextState: State) -> Unit = { _, _, _ -> }) : SynchronizedObject(source)